Eshell has different $ expansion syntax from
other shells. There are some similarities, but don’t let
these lull you into a false sense of familiarity.
$varExpands to the value bound to var. This is
the main way to use variables in command invocations.
$#varExpands to the length of the value bound to
var. Raises an error if the value is not a
sequence (see
Sequences in The Emacs Lisp Reference
Manual).
$(lisp)Expands to the result of evaluating the S-expression
(lisp). On its own, this is identical to just
(lisp), but with the $, it can be
used in a string, such as
‘/some/path/$(lisp).txt’.
${command}Returns the output of command, which can be
any valid Eshell command invocation, and may even contain
expansions.
$var[i]Expands to the ith element of the value bound
to var. If the value is a string, it will be
split at whitespace to make it a list. Again, raises an error
if the value is not a sequence.
$var[: i]As above, but now splitting occurs at the colon character.
$var[: i j]As above, but instead of returning just a string, it now returns a list of two strings. If the result is being interpolated into a larger string, this list will be flattened into one big string, with each element separated by a space.
$var["\\\\" i]Separate on backslash characters. Actually, the first argument – if it doesn’t have the form of a number, or a plain variable name – can be any regular expression. So to split on numbers, use ‘$var["[0-9]+" 10 20]’.
$var[hello]Calls assoc on var with
"hello", expecting it to be an alist (see
Association Lists in The Emacs Lisp Reference
Manual).
$#var[hello]Returns the length of the cdr of the element of
var who car is equal to
"hello".